## Warning: package 'geojsonio' was built under R version 3.5.2
## Warning: package 'shape' was built under R version 3.5.2
## Warning: package 'shinythemes' was built under R version 3.5.2
## Warning: package 'kableExtra' was built under R version 3.5.2

1 Introduction:

La fouille de données (data mining) permet de faire un lien entre les statistiques et les technologies de l’information (base de données, intelligence artificielle, apprentissage automatique (machine learning), utilisée pour la recherche d’informations dans les grandes bases de données médicales ou de santé. Les outils de collecte automatique des données et bases de données permettent de stocker dans des entrepôts d’énormes masses de données. La fouille de données et les entrepôts permettent l’extraction de connaissances.
L’utilisation de ces masses de données, issues de structures médicales, peut permettre d’acquérir de nouvelles connaissances via différents types d’études. Notamment avec le logiciel R.

Dans ce projet on est amenées à Construire un mini-entrepôt de données environnementales au format i2b2 Construire une application shiny pour explorer notre entrepôt de données Analysez la corrélation entre exposition environnementales et répartition des patients atteints de la maladie X par des méthodes de statistiques spatiales.

2 Description des données

Pour l’aboutissement de notre projet nous avons choisis deux jeux de données : -polluants par établissements avec localisation établissements qui se compose de 9572 observations et 6 variables et 14954 observations et 15 variables provenant du site : https://public.opendatasoft.com/explore/dataset/registre-francais-des-emission-polluantes-etablissements/table/ -Radon se compose de 36104 observations et 5 variables et provient du site : https://www.data.gouv.fr/fr/datasets/connaitre-le-potentiel-radon-de-ma-commune/

Le registre des rejets et des transferts de polluants (RRTP) est un inventaire national des substances chimiques et/ou des polluants potentiellement dangereux rejetés dans l’air, l’eau et le sol de la production et du traitement des déchets dangereux et non dangereux Les attributs de cette base sont :

## Parsed with column specification:
## cols(
##   nom = col_character(),
##   codeCommune = col_character(),
##   nomCommune = col_character(),
##   cp = col_character(),
##   designationAPE = col_character(),
##   designationEPRTR = col_character()
## )
## Warning: 9572 parsing failures.
## row col  expected    actual                     file
##   1  -- 6 columns 7 columns 'data/etablissement.csv'
##   2  -- 6 columns 7 columns 'data/etablissement.csv'
##   3  -- 6 columns 7 columns 'data/etablissement.csv'
##   4  -- 6 columns 7 columns 'data/etablissement.csv'
##   5  -- 6 columns 7 columns 'data/etablissement.csv'
## ... ... ......... ......... ........................
## See problems(...) for more details.
##      nom            codeCommune         nomCommune       
##  Length:9572        Length:9572        Length:9572       
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##       cp            designationAPE     designationEPRTR  
##  Length:9572        Length:9572        Length:9572       
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character

Liste des Etablissements polluants selon GeoRisque

localisationParEtablissement <- read_delim("data/registre-francais-des-emission-polluantes-etablissements.csv" , ";" , escape_double = FALSE , trim_ws = TRUE)
## Parsed with column specification:
## cols(
##   Identifiant = col_character(),
##   `Nom Etablissement` = col_character(),
##   `Numéro Siret` = col_character(),
##   Adresse = col_character(),
##   `Code Postal` = col_character(),
##   Commune = col_character(),
##   Departement = col_character(),
##   Region = col_character(),
##   coordonnées_x = col_character(),
##   coordonnées_y = col_character(),
##   `Code APE` = col_character(),
##   `Libellé APE` = col_character(),
##   `Code Eprtr` = col_character(),
##   `Libelle Eprtr` = col_character(),
##   coordonnees = col_character()
## )
summary(localisationParEtablissement)
##  Identifiant        Nom Etablissement  Numéro Siret      
##  Length:14954       Length:14954       Length:14954      
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##    Adresse          Code Postal          Commune         
##  Length:14954       Length:14954       Length:14954      
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##  Departement           Region          coordonnées_x     
##  Length:14954       Length:14954       Length:14954      
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##  coordonnées_y        Code APE         Libellé APE       
##  Length:14954       Length:14954       Length:14954      
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##   Code Eprtr        Libelle Eprtr      coordonnees       
##  Length:14954       Length:14954       Length:14954      
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character
knitr::opts_chunk$set(echo = TRUE)

Liste des Etablissements avec leur localisation Le radon qui est un gaz radioactif produit par la désintégration naturelle de l’uranium présent dans les roches. Cancérigène pulmonaire, il présente un risque pour la santé lorsqu’il s’accumule dans les bâtiments. L’étude de jeux de données nous permet de voir le potentiel radon dans chaque commune, les attributs de cette base de données sont :

## Parsed with column specification:
## cols(
##   nom_comm = col_character(),
##   nom_dept = col_character(),
##   insee_com = col_character(),
##   classe_potentiel = col_double(),
##   reg = col_character()
## )
## Warning: 2 parsing failures.
##   row              col expected   actual             file
## 17174 classe_potentiel a double #VALEUR! 'data/radon.csv'
## 17183 classe_potentiel a double #VALEUR! 'data/radon.csv'
##    nom_comm           nom_dept          insee_com         classe_potentiel
##  Length:36104       Length:36104       Length:36104       Min.   :1.000   
##  Class :character   Class :character   Class :character   1st Qu.:1.000   
##  Mode  :character   Mode  :character   Mode  :character   Median :1.000   
##                                                           Mean   :1.449   
##                                                           3rd Qu.:2.000   
##                                                           Max.   :3.000   
##                                                           NA's   :2       
##      reg           
##  Length:36104      
##  Class :character  
##  Mode  :character  
##                    
##                    
##                    
## 

Potentiel Radon

3 Création de l’entrepot de données:

Après avoir choisi les deux jeux de données, bien les analyser et étudier on est passé à l’étape de la construction de notre entrepôt de données à partir des deux jeux donnés Et cela au format i2b2 (Informatics for Integrating Biology & the Bedside) Donc la fouille de données qui consistait à analyser les jeux de données choisit nous a permis d’extraire des connaissances. Regrouper des techniques statistiques et ainsi pouvoir construire notre propre entrepôt de données. Les données de notre entrepôt au format i2b2 résident est décrite dans le schéma en étoile suivant qui est la structure de données la plus utilisée et la plus appropriée aux requêtes et analyses des utilisateurs d’entrepôts de données

A caption

A caption

Comme le décrit le schéma ci-dessus : La Table centrale « commune » qui contient les données observables les faits qui sont numérique et d’ordre quantitatif que l’on possède que l’on veut étudier (classe Radon, nombre établissement par département et commune …), selon divers axes d’analyse les dimensions qui sont les tables de dimensions (informations, localisation établissement, localisation, établissement polluant) selon lesquels on veut étudier les données observables (les faits).

1-Création de la base de données: On a créé la table Établissement qui est la jointure entre la table polluant Par Établissement et localisation Par Établissement on change les noms des colonnes pour eviter les problemes d’encodage . on a aussi separé l’attribut coordonnées en deux colonnes : longitude et latitude

EtablissementsPolluants <- polluants %>% dplyr::select( nom ) %>% 
  setnames(old=c("nom"), new=c("Nom Etablissement")) %>% 
  merge(localisationParEtablissement,by="Nom Etablissement")
EtablissementsPolluants <-  setDT(EtablissementsPolluants)[, paste0("type", 1:2) := tstrsplit(coordonnees, ",", type.convert = TRUE, fixed = TRUE)] %>% 
  setnames(old=c("type1","type2"), new=c("lng","lat"))
EtablissementsPolluants <- EtablissementsPolluants %>% filter(!is.na(EtablissementsPolluants$lat)) 
colnames(EtablissementsPolluants)[12] <- "Libelle_APE"
colnames(EtablissementsPolluants)[1] <- "Nom_etablissement"
colnames(EtablissementsPolluants)[3] <- "Num_Siret"
colnames(EtablissementsPolluants)[11] <- "CODE_APE"
colnames(EtablissementsPolluants)[13] <- "CODE_Eprtr"
tableau(EtablissementsPolluants[1:10,])
Nom_etablissement Identifiant Num_Siret Adresse Code Postal Commune Departement Region coordonnées_x coordonnées_y CODE_APE Libelle_APE CODE_Eprtr Libelle Eprtr coordonnees lng lat
‘ONYX Auv. Rhône Alpes’‘Plateforme de production d’amendement Organique’’’ 056.01460 30259089800516 Champ Viollant 63260 AUBIAT PUY-DE-DOME AUVERGNE 667141.2 2109301.48 3821Z Traitement et élimination des déchets non dangereux 5.(c) Installations destinées à l’élimination des déchets non dangereux d’une capacité de 50 tonnes par jour 45.9806220489, 3.20302004009 45.98062 3.203020
‘Onyx Auvergne Rhône Alpes’‘Auvergne Déchets Spéciaux’’’ 056.00360 30259089800490 Rue François Arago ZI Sud 63360 GERZAT PUY-DE-DOME AUVERGNE 662577 2091585 3812Z Collecte des déchets dangereux 5.(a) Installations pour la valorisation ou l’élimination des déchets dangereux recevant 10 tonnes par jour 45.8216749812, 3.1417817053 45.82167 3.141782
.SYNTHEXIM 070.00882 41444299600024 .ZI des Dunes Rue des Mouettes 62100 CALAIS PAS-DE-CALAIS NORD-PAS-DE-CALAIS 569213.5892939 2663865.1717914 2110Z Fabrication de produits pharmaceutiques de base 4.(e) Installations utilisant un procédé chimique ou biologique pour la fabrication industrielle de produits pharmaceutiques de base 50.9670870286, 1.89935000532 50.96709 1.899350
1° RHC 090.00115 15400074900015 quartier LA HORIE Phalsbourg 57373 PHALSBOURG MOSELLE LORRAINE 957705 2430229 8422Z Défense NA NA 48.770838746, 7.20355174478 48.77084 7.203552
1000 PIECES AUTOS 062.06362 42159285800011 rue Jean Prouvé 57600 FORBACH MOSELLE LORRAINE 930809 2473458 4532Z Commerce de détail d’équipements automobiles 5.(a) Installations pour la valorisation ou l’élimination des déchets dangereux recevant 10 tonnes par jour 49.1730717207, 6.87233533978 49.17307 6.872335
12° base de soutien du matériel 090.00017 15000062800019 Route du camp 36100 NEUVY-PAILLOUX INDRE CENTRE 562585 2208900 8422Z Défense 2.(f) Installations de traitement de surface de métaux et des matières plastiques utilisant un procédé électrolytique ou chimique lorsque le volume des cuves affectées au traitement est égal à 30 m3 46.8789631151, 1.84564020341 46.87896 1.845640
12e BSMAT - Détachement de GIEN 090.00141 15000082600019 97 - avenue Wilson BP 70029 45501 GIEN Cedex 45500 GIEN LOIRET CENTRE 622133.567 2299665.309 8422Z Défense NA NA 47.6961111769, 2.63138874436 47.69611 2.631389
12ème Régiment de Cuirassiers 090.00259 13001364200017 Quartier Valmy BP 119 45161 OLIVET LOIRET CENTRE 565655.854 2313276.541 8422Z Défense NA NA 47.8179948595, 1.87792691809 47.81799 1.877927
13ème Base de Soutien du Matériel 090.00011 15400005300384 Rue de l’arsenal BP 20 63035 CLERMONT-FERRAND PUY-DE-DOME AUVERGNE 662000 2088600 8422Z Défense 2.(f) Installations de traitement de surface de métaux et des matières plastiques utilisant un procédé électrolytique ou chimique lorsque le volume des cuves affectées au traitement est égal à 30 m3 45.7948739418, 3.13396807135 45.79487 3.133968
13ème BSMAT - Détachement de Moulins 090.00254 15000065100011 Détachement de Moulins 57 - rue des Époux Contoux BP 74 03402 YZEURE ALLIER AUVERGNE 677503 2172031 8422Z Défense NA NA 46.5438436592, 3.34712959593 46.54384 3.347130

Table 1 : Etablissement Polluant ainsi que leur localisation Ensuite on a fait la jointure de la table crée et la table radon selon le Département et les communes afin d’eviter un maximum les NAs.on a eu besoin d’une normalisation de texte pour garantir les matches entres les attribus

EtablissementsPolluants$Departement <- gsub("[[:punct:]]", "", as.character(EtablissementsPolluants$Departement))
radon$nom_dept <-  gsub("[[:punct:]]", "", as.character(radon$nom_dept))
EtablissementsPolluants$Departement <- tolower(EtablissementsPolluants$Departement)
radon$nom_dept <- tolower(radon$nom_dept)
EtablissementsPolluants <- EtablissementsPolluants %>% filter(!is.na(Departement))%>% group_by(Departement)
radon <- radon %>% filter(!is.na(nom_dept)) %>% group_by(nom_dept)
EtablissementsPolluants$Commune <- gsub("[[:punct:]]", "", as.character(EtablissementsPolluants$Commune))
radon$nom_comm <-  gsub("[[:punct:]]", "", as.character(radon$nom_comm))
EtablissementsPolluants$Commune <- tolower(EtablissementsPolluants$Commune)
radon$nom_comm <- tolower(radon$nom_comm)
EtablissementsPolluants <- EtablissementsPolluants %>% filter(!is.na(Commune))%>% group_by(Commune)
radon <- radon %>% filter(!is.na(nom_comm)) %>% group_by(nom_comm)
EtablissementRadon <- merge(radon,EtablissementsPolluants,by.x=c("nom_comm","nom_dept"),by.y=c("Commune","Departement"),all.x=F,all.y=T)
EtablissementRadon <- EtablissementRadon %>% dplyr::filter(!is.na(EtablissementRadon$lng))
tableau(EtablissementRadon[1:10,])
nom_comm nom_dept insee_com classe_potentiel reg Nom_etablissement Identifiant Num_Siret Adresse Code Postal Region coordonnées_x coordonnées_y CODE_APE Libelle_APE CODE_Eprtr Libelle Eprtr coordonnees lng lat
abbeville somme 80001 1 FR REVIVAL 051.04391 61662009200133 Zone d’entrepôt Rue Ventose 80100 PICARDIE 565871.71 2567726.27 3831Z Démantèlement d’épaves NA NA 50.1044595053, 1.86018678173 50.10446 1.860187
abbeville somme 80001 1 FR REVIVAL 051.04391 61662009200133 Zone d’entrepôt Rue Ventose 80100 PICARDIE 565871.71 2567726.27 3831Z Démantèlement d’épaves NA NA 50.1044595053, 1.86018678173 50.10446 1.860187
abbeville somme 80001 1 FR REVIVAL 051.04391 61662009200133 Zone d’entrepôt Rue Ventose 80100 PICARDIE 565871.71 2567726.27 3831Z Démantèlement d’épaves NA NA 50.1044595053, 1.86018678173 50.10446 1.860187
abbeville somme 80001 1 FR REVIVAL 051.04391 61662009200133 Zone d’entrepôt Rue Ventose 80100 PICARDIE 565871.71 2567726.27 3831Z Démantèlement d’épaves NA NA 50.1044595053, 1.86018678173 50.10446 1.860187
abbeville somme 80001 1 FR Lactinov Abbeville 051.01699 38258627900012 ZI Route de Vauchelles 80143 PICARDIE 564358 2568159 1051A Fabrication de lait liquide et de produits frais 8.(c) Traitement et transformation du lait d’une capacité de traitement de 200 tonnes de lait par jour (valeur moyenne sur une base annuelle) 50.1082593515, 1.83902346142 50.10826 1.839023
abbeville somme 80001 1 FR REVIVAL 051.04391 61662009200133 Zone d’entrepôt Rue Ventose 80100 PICARDIE 565871.71 2567726.27 3831Z Démantèlement d’épaves NA NA 50.1044595053, 1.86018678173 50.10446 1.860187
abbeville somme 80001 1 FR REVIVAL 051.04391 61662009200133 Zone d’entrepôt Rue Ventose 80100 PICARDIE 565871.71 2567726.27 3831Z Démantèlement d’épaves NA NA 50.1044595053, 1.86018678173 50.10446 1.860187
abbeville somme 80001 1 FR REVIVAL 051.04391 61662009200133 Zone d’entrepôt Rue Ventose 80100 PICARDIE 565871.71 2567726.27 3831Z Démantèlement d’épaves NA NA 50.1044595053, 1.86018678173 50.10446 1.860187
abbeville somme 80001 1 FR REVIVAL 051.04391 61662009200133 Zone d’entrepôt Rue Ventose 80100 PICARDIE 565871.71 2567726.27 3831Z Démantèlement d’épaves NA NA 50.1044595053, 1.86018678173 50.10446 1.860187
abbeville somme 80001 1 FR REVIVAL 051.04391 61662009200133 Zone d’entrepôt Rue Ventose 80100 PICARDIE 565871.71 2567726.27 3831Z Démantèlement d’épaves NA NA 50.1044595053, 1.86018678173 50.10446 1.860187

Table 2 :Etablissement Polluant avec Potentiel Radon On a ensuite utilisé cette table pour crée un spatial Points data frame pour modéliser nos points dans la carte

coordinates(EtablissementRadon) <- ~ lng + lat
EtablissementRadon@coords <- EtablissementRadon@coords[,c(2,1)]
knitr::opts_chunk$set(echo = TRUE)

4 Conception des cartes de France en fonctions de plusieurs attributs

Concernant les données geographiques nous avons importé un fichier qu’on trouvé sur GiTHUB qui est un Spatial Polygon Data Frame , afin d’avoir les coordonnées des polygones selon les departements a partir des codes INSEE des communes , nous avons par la suite fait une jointure entre les données geographique et le potentiel radon ainsi que l’incidence de la maladie X [l’incidence est representé par departement (ratioEvenement)nous avons utilisé le code fait en cours pour la creation de la table (afin d’inclure la question 3 dans l’application Shiny )].

departements <- geojsonio::geojson_read("data/departements.geojson", what = "sp")
departements$nom <- gsub("[[:punct:]]", "", as.character(departements$nom ))
departements$nom <- tolower(departements$nom )
departements@data = data.frame(departements@data, ratioEvenement[match(departements@data$nom, ratioEvenement$dep),])
departements@data = data.frame(departements@data, radon[match(departements@data$nom, radon$nom_dept),])

EtablissementRadon@data= data.frame(EtablissementRadon@data, ratioRadon[match(EtablissementRadon@data$classe_potentiel, ratioRadon$classe_potentiel),])
EtablissementsPolluants$Departement <- toupper(EtablissementsPolluants$Departement)
EtablissementsPolluants$Commune <- toupper(EtablissementsPolluants$Commune)
knitr::opts_chunk$set(echo = TRUE)

On a réalisé une première carte qui représente le ratio de l’évènement de la maladie X selon les Régions

Carte 1Incidence Maladie par Departement La seconde carte représente le potentiel Radon selon les departements département

pal <-colorFactor(c("gray","yellow","red"), domain = c(1,2,3) , na.color ="white" , alpha = TRUE )

carteRadonDepartement <- leaflet(departements) %>%  addProviderTiles(providers$Esri.WorldStreetMap) %>% 
  setView(lat = 47.256, lng = 2.35, zoom = 6) %>% 
  addPolygons( fillColor = ~pal(classe_potentiel),
                       weight = 2,
                       opacity = 1,
                       color = "white",
                       dashArray = "3",
                       fillOpacity = 0.7)           %>% addLegend(pal = pal, 
                                                                  values = ~classe_potentiel, 
                                                                  opacity = 0.7, 
                                                                  title = "Potentiel Radon",
                                                                  position = "topright") 
carteRadonDepartement 
knitr::opts_chunk$set(echo = TRUE)

Carte 2Potentiel Radon par Departement La troisième carte représente la carte de France par département avec des Marqueurs qui font référence à tous les établissements

col <- colorFactor(c("gray","yellow","red"), domain = c(1,2,3) , na.color ="white" , alpha = TRUE )
carteEtablissements <- leaflet(departements) %>%
  addProviderTiles(providers$Esri.WorldStreetMap) %>%setView(lat = 47.256, lng = 2.35, zoom = 6) %>% 
  addMarkers(data = EtablissementRadon@coords, 
             clusterOptions = markerClusterOptions() ,
             label = EtablissementRadon@data$Nom_etablissement ,
             popup = str_c("<br/>Commune :<br/>",EtablissementRadon@data$nom_comm ,"<br/> num siret :<br/> " , 
                           EtablissementRadon@data$Num_Siret, "<br/> APE : <br/>" , 
                           EtablissementRadon@data$Libelle_APE  ) ) 
carteEtablissements
knitr::opts_chunk$set(echo = TRUE)

Carte 3Etablissement Polluants

5 Réalisation d’histogramme

Nous avons choisis pour analysé les données de representé un histogramme interactif selon le departement : on peux choisir l’axe des X de notre Histogramme selon : Nom etablissement , Libellé APE ou code EPRTR , en y ajoutant sur Shiny un tableau pour bien lire les données

histDepartement <- function(EtablissementsPolluants, choice,ligne) {
  plot <- EtablissementsPolluants %>% filter(Departement == choice) %>%  group_by(Libelle_APE) %>% filter(!is.na(Libelle_APE))
  plot2 <- plot[1:ligne,]
  p <-  ggplot(data = plot2 , aes (x=plot2$Libelle_APE,y=length(Nom_etablissement)/ligne)) + 
    geom_bar(aes(fill=Commune), stat="identity" , position = position_stack(reverse = TRUE)) + coord_flip() +
    theme(legend.position = "bottom") + 
    xlab("Libellé APE") + ylab("Nombre Etablissements ") + ggtitle(choice) 
  ggplotly(p ) 
}
histDepartementNom <- function(EtablissementsPolluants, choice,ligne) {
  plot <- EtablissementsPolluants %>% filter(Departement == choice) %>%  group_by(Nom_etablissement) %>% filter(!is.na(Nom_etablissement))
  plot2 <- plot[1:ligne,]
  p <-  ggplot(data = plot2 , aes (x=plot2$Nom_etablissement,y=length(Nom_etablissement)/ligne)) + 
    geom_bar(aes(fill=Commune), stat="identity" , position = position_stack(reverse = TRUE)) + coord_flip() +
    theme(legend.position = "bottom") + 
    xlab("Nom Etablissement") + ylab("Nombre Etablissements ") + ggtitle(choice) 
  ggplotly(p ) 
}

histDepartementCodeEprtr <- function(EtablissementsPolluants, choice,ligne) {
  plot <- EtablissementsPolluants %>% filter(Departement == choice) %>%  group_by(CODE_Eprtr) %>% filter(!is.na(CODE_Eprtr))
  plot2 <- plot[1:ligne,]
  p <-  ggplot(data = plot2 , aes (x=plot2$CODE_Eprtr,y=length(Nom_etablissement)/ligne)) + 
    geom_bar(aes(fill=Commune), stat="identity" , position = position_stack(reverse = TRUE)) + coord_flip() +
    theme(legend.position = "bottom") + 
    xlab("Code Eprtr ") + ylab("Nombre Etablissements ") + ggtitle(choice) 
  ggplotly(p ) 
}
knitr::include_graphics("histogramme.png")
A caption

A caption

6 Description de l’application shiny

L’utilisations de l’application shiny nous a permis d’avoir une seule carte interactive avec laquelle on peut changer à chaque fois l’attribut que l’on voudra étudier et représenter.

Mais aussi réaliser plusieurs histogrammes et cela en choisissant à chaque fois ce qu’on veut représenter, donc changer le libellé des axis selon le Libellé APE, Libelle Eprtr, Nom établissement, Code Eprtr

Nous avons choisi de sélectionne nos valeurs par départements on a opté pour cela, car pour région il y’a énormément de valeurs et commune ou contrairement on a peu de valeurs. Donc choisir les valeurs de nos tables par département et mettre les communes en variable de couleurs étais le choix optimal que nous avons jugé objectif et satisfaisant pour notre application. Vous Pouvez trouver l’application Shiny dans le fichier AppShiny

shinyApp(
  ui <- fluidPage(
    theme = shinytheme("slate"),
    sidebarPanel(
      selectInput("axis","Choix X :" , choices = c("Libelle APE","Nom Etablissement","Code Eprtr"),selected = "Libelle APE"),
      selectInput("Departement",  "Departement :",
                  choices = EtablissementsPolluants$Departement , selected = ""),
      checkboxInput("table","montrer le tableau de données",value = FALSE),
      sliderInput(inputId ="size", label="Nombre De Lignes", value = 15,
                  min = 5, max = 150, step = 5, animate =T , width = '400px' ),
      sliderInput(inputId ="opacity", label="Opacitée Incidence de la maladie X", value = 0,
                  min = 0, max = 2, step = 0.5, animate =T , width = '400px' ),
      sliderInput(inputId ="opacityRadon", label="Opacitée Potentiel Radon Par Region", value = 0,
                  min = 0, max = 2, step = 0.5, animate =T , width = '400px' ),
      radioButtons(inputId="points", label="Ploter des points",
                   choices = c("Incidence Maladie Par Commune",
                               "Potentiel Radon par Commune",
                               "Pas de Points"), 
                   selected = "Pas de Points",
                   width = "400px" )
      
      
     ),
    
    mainPanel(
      tabsetPanel(
        tabPanel("Carte Interactive",box( leafletOutput("map", width = "100%", height = "700px"),title = "Carte Interavtive pour les EtablissementsPolluants,PotentielRadon,IncidenceMaladieX",width = "100%", height = "100%")),
        tabPanel("Analyse de Donnees",plotlyOutput("Plot"), 
                 DT::dataTableOutput("tableau"))
        ))),
  
  
  server <- function(input, output) {
    output$tableau <- DT::renderDataTable({
    if (input$table){
      DT::datatable(data = EtablissementsPolluants %>% filter(Departement == input$Departement)  %>% dplyr::select(Nom_etablissement,
                                                                                                  Libelle_APE,
                                                                                                  CODE_APE ,
                                                                                                  `Libelle Eprtr`,Departement,Commune),
                    options = list(pageLength=10),rownames = F)
    }})
    
    output$Plot  <- renderPlotly({  if(input$axis=="Libelle APE"){
      histDepartement(EtablissementsPolluants,input$Departement,input$size)}
      else if (input$axis=="Nom Etablissement"){ histDepartementNom(EtablissementsPolluants,input$Departement,input$size)}
      else if (input$axis=="Code Eprtr"){histDepartementCodeEprtr(EtablissementsPolluants,input$Departement,input$size)
      }})
   
   
    output$map <- renderLeaflet({
if(input$points=="Incidence Maladie Par Commune"){
  
carteEtablissements %>% 
    addPolygons( fillColor = ~pal2(ratio),
                 weight = 2,
                 opacity = 1,
                 color = "white",
                 dashArray = "3",
                 fillOpacity = input$opacity)%>% addLegend(pal = pal2, 
                                                           values = ~ratio, 
                                                           opacity = 0.7, 
                                                           title = "Ratio incidence maladie X",
                                                           position = "bottomright") %>% 
    addPolygons( fillColor = ~pal(classe_potentiel),
                 weight = 2,
                 opacity = 1,
                 color = "White",
                 dashArray = "3",
                 fillOpacity = input$opacityRadon) %>% 
    addLegend(pal = pal, 
              values = ~classe_potentiel, 
              opacity = 0.7, 
              title = "Potentiel Radon",
              position = "topright")   %>%  
addCircles(data = EtablissementRadon@coords, 
                 color= pal2(EtablissementRadon$ratio) ,
                 label = EtablissementRadon$nom_dept,
                  popup = str_c("<br/>Ratio :<br/>",EtablissementRadon@data$ratio,
                                                  "<br/>Commune :<br/>",EtablissementRadon@data$nom_comm ) )
}
else if(input$points=="Potentiel Radon par Commune"){
  carteEtablissements %>%     addPolygons( fillColor = ~pal2(ratio),
                 weight = 2,
                 opacity = 1,
                 color = "white",
                 dashArray = "3",
                 fillOpacity = input$opacity)%>% addLegend(pal = pal2, 
                                                           values = ~ratio, 
                                                           opacity = 0.7, 
                                                           title = "Ratio incidence maladie X",
                                                           position = "bottomright") %>% 
    addPolygons( fillColor = ~pal(classe_potentiel),
                 weight = 2,
                 opacity = 1,
                 color = "White",
                 dashArray = "3",
                 fillOpacity = input$opacityRadon)   %>% 
    addLegend(pal = pal, 
              values = ~classe_potentiel, 
              opacity = 0.7, 
              title = "Potentiel Radon",
              position = "topright")   %>%  
    addCircles(data = EtablissementRadon@coords, 
                     color= pal(EtablissementRadon@data$classe_potentiel) ,
                     label = EtablissementRadon$nom_dept,
                     popup = str_c("<br/>Ratio :<br/>",EtablissementRadon@data$classe_potentiel,
                                   "<br/>Commune :<br/>",EtablissementRadon@data$nom_comm ) )
}
else if(input$points=="Pas de Points"){carteEtablissements %>% 
    addPolygons( fillColor = ~pal2(ratio),
                 weight = 2,
                 opacity = 1,
                 color = "white",
                 dashArray = "3",
                 fillOpacity = input$opacity)%>% addLegend(pal = pal2, 
                                                           values = ~ratio, 
                                                           opacity = input$opacity, 
                                                           title = "Ratio incidence maladie X",
                                                           position = "bottomright") %>% 
    addPolygons( fillColor = ~pal(classe_potentiel),
                 weight = 2,
                 opacity = 1,
                 color = "White",
                 dashArray = "3",
                 fillOpacity = input$opacityRadon) %>% 
    addLegend(pal = pal, 
              values = ~classe_potentiel, 
              opacity = 0.6, 
              title = "Potentiel Radon",
              position = "topright")  
    
    
}
      

      
    })
  },
options = list(width = "1400", height = "1000")
)
## PhantomJS not found. You can install it with webshot::install_phantomjs(). If it is installed, please make sure the phantomjs executable can be found via the PATH variable.
Shiny applications not supported in static R Markdown documents

7 Etude de l’Autocorrelation spatial :

departements@data$ratio <- replace(departements@data$ratio, is.na(departements@data$ratio), 0) 
#Voisinage pour autocorrelation
voisinQ=poly2nb(departements)
voisinR=poly2nb(departements,   queen=FALSE)        
coords = coordinates(departements)
#Matrice conguite
matrice_conguiteQ = nb2listw(voisinQ,zero.policy=TRUE)  
#Bootstrap
bootstrap=moran.mc(departements$ratio,listw=matrice_conguiteQ,  nsim=999)       
#autocorrelogram
cor=sp.correlogram(voisinQ, departements$ratio, order=8,    method="I", style="W",zero.policy=TRUE )    
#stone
Coordonees <-  EtablissementsPolluants %>% dplyr::select(Departement,lng,lat)
## Adding missing grouping variables: `Commune`
doublons <- which(duplicated(Coordonees$Departement)) 
Coordonees<-Coordonees[-doublons,]
Coordonees$Departement <- gsub("[[:punct:]]", "", as.character(Coordonees$Departement))
Coordonees$Departement <- tolower(Coordonees$Departement)
stoneTest <- merge(ratioEvenement,Coordonees,by.x="dep" ,by.y="Departement")
ratioRadon <- ratioRadon %>% select(dep,ratio,classe_potentiel)
colnames(stoneTest) <- c("dep","Observed","commune","x","y")
stoneTest <-  left_join(stoneTest,ratioRadon)
## Joining, by = "dep"
stoneTest <- stoneTest %>% filter(!is.na(stoneTest$ratio))
stoneTest <- stoneTest %>% filter(!is.na(stoneTest$classe_potentiel))
stoneTest<-cbind(stoneTest, Expected=stoneTest$classe_potentiel*stoneTest$ratio/stoneTest$classe_potentiel)
stoneTest <- stoneTest %>% dplyr::select(dep,Observed,Expected,x,y)

Afin d’etudier l’autocorrelation de l’incidence de la maladie X nous avons dabord construit un voisinage de type queen

plot(departements)  
plot(voisinQ,   coords, add=T,  col=2)  
legend("bottom",c("queen"), 
       text.col=c(2,3)) 

ensuite nous avons Crée une matrice de contiguité standardisée (type queen) pour pouvoir etudier l’autocorrelation spatiale par le test de Morane

matrice_conguiteQ
## Characteristics of weights list object:
## Neighbour list object:
## Number of regions: 96 
## Number of nonzero links: 476 
## Percentage nonzero weights: 5.164931 
## Average number of links: 4.958333 
## 
## Weights style: W 
## Weights constants summary:
##    n   nn S0       S1       S2
## W 96 9216 96 44.29206 391.9874

8 Tests d’Autocorrelation Spatial

Nous avons effectué le test de Morane , avec le bootstrap , nous avons obtenu une p.value assez ellevé et un indice de Morane Negatif ce qui explique donc l’absence d’autocorrelation spatiale pour l’incidance de la maladie X en fonction des departements

moran.test(ratioEvenement$ratio,    listw=matrice_conguiteQ,    alternative="two.sided",    randomisation=FALSE)    
## 
##  Moran I test under normality
## 
## data:  ratioEvenement$ratio  
## weights: matrice_conguiteQ    
## 
## Moran I statistic standard deviate = 0.14069, p-value = 0.8881
## alternative hypothesis: two.sided
## sample estimates:
## Moran I statistic       Expectation          Variance 
##      -0.001007117      -0.010526316       0.004578167
hist(bootstrap$res, freq=TRUE,breaks=20, xlab="Simulated Moran's I")
abline(v=0, col='red')

8.1 Tests de gary

Meme resultats , qui expliquee l’absence d’autocorrelation spatial par rapport a l’incidence de la maladie X

geary.test(ratioEvenement$ratio,    listw=matrice_conguiteQ,    alternative="two.sided")
## 
##  Geary C test under randomisation
## 
## data:  ratioEvenement$ratio 
## weights: matrice_conguiteQ 
## 
## Geary C statistic standard deviate = -0.58119, p-value = 0.5611
## alternative hypothesis: two.sided
## sample estimates:
## Geary C statistic       Expectation          Variance 
##       1.041589500       1.000000000       0.005120805

8.2 Autocorrelogramme

Nous avons ensuite effectué un autocorrelogramee pour confirmer l’Hypotese que l’incidence de la maladie est independante de ca localisation geographique

plot(cor)

8.3 Test de Stone :

Nous avons appliquer le test de Stone sur l’incidance de la maladie X par rapport au potentiel radon par departement la p.value est toujours tres elevé ce qui montre l’absence d’autocorrelation spatiale entre ces 2 attributs , Voici Un Exemple pour Paris

stone.test(Observed~offset(log(Expected)), stoneTest, model="poisson", R=99,region="paris", lambda=1)
## Stone's Test for raised incidence around locations 
## 
##  Type of boots.: parametric 
##  Model used when sampling: Poisson 
##  Number of simulations: 99 
##  Statistic:  1 
##  p-value :  1

9 Merci

vous Pouvez trouvez l’application Shiny sur le fichier Appli Shiny